home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AmigActive 2
/
AACD 2.iso
/
AACD
/
Magazine
/
GraphicsCards
/
StormMesa
/
src
/
bitmap.s
< prev
next >
Wrap
Text File
|
1999-02-04
|
13KB
|
730 lines
; Storm C Compiler
; Work2:Mesa3/Mesa-3.0/src/bitmap.c
mc68030
mc68881
XREF _gl_flush_pb
XREF _gl_pixel_addr_in_image
XREF _gl_feedback_vertex
XREF _gl_update_state
XREF _gl_error
XREF _std__in
XREF _std__out
XREF _std__err
XREF _CC
SECTION "_render_bitmap:0",CODE
;static void render_bitmap( GLcontext *ctx, GLint px, GLint py,
_render_bitmap
L87 EQU -$2C
link a5,#L87
movem.l d2-d7/a2-a4,-(a7)
move.l $14(a5),d4
move.l $10(a5),d7
move.l $8(a5),a4
L43
; struct pixel_buffer *PB = ctx->PB;
move.l a4,a0
add.l #$E998,a0
move.l (a0),a2
; if (!bitmap)
tst.l $20(a5)
bne.b L45
L44
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
L45
; if (ctx->NewState)
move.l a4,a0
add.l #$E960,a0
tst.l (a0)
beq.b L47
L46
; gl_update_state(ctx);
move.l a4,-(a7)
jsr _gl_update_state
addq.w #4,a7
; PB_INIT( PB, GL_BITMAP )
move.l a2,a0
add.l #$27D94,a0
clr.l (a0)
; PB_INIT( PB, GL_BITMAP )
move.l a2,a0
add.l #$27D98,a0
clr.b (a0)
; PB_INIT( PB, GL_BITMAP )
move.l a2,a0
add.l #$27D9A,a0
move.l #$1A00,(a0)
L47
; if (ctx->Visual->RGBAflag)
move.l a4,a1
move.l $8F8(a1),a0
tst.b (a0)
beq L55
L48
; r = (GLint) (ctx->Current.RasterColor[0] * 255.0F);
fmove.s $2262(a4),fp0
fmul.s #$.437F0000,fp0
fmove.l fp0,d0
move.l d0,d6
; g = (GLint) (ctx->Current.RasterColor[1] * 255.0F);
lea $2262(a4),a0
fmove.s 4(a0),fp0
fmul.s #$.437F0000,fp0
fmove.l fp0,d5
; b = (GLint) (ctx->Current.RasterColor[2] * 255.0F);
lea $2262(a4),a0
fmove.s $8(a0),fp0
fmul.s #$.437F0000,fp0
fmove.l fp0,d3
; a = (GLint) (ctx->Current.RasterColor[3] * 255.0F);
lea $2262(a4),a0
fmove.s $C(a0),fp0
fmul.s #$.437F0000,fp0
fmove.l fp0,d2
; PB_SET_COLOR( ctx, PB,
move.l a2,a0
add.l #$27D80,a0
move.l (a0),d0
cmp.l d6,d0
bne.b L53
L49
move.l a2,a0
add.l #$27D80,a0
move.l 4(a0),d0
cmp.l d5,d0
bne.b L53
L50
move.l a2,a0
add.l #$27D80,a0
move.l $8(a0),d0
cmp.l d3,d0
bne.b L53
L51
move.l a2,a0
add.l #$27D80,a0
move.l $C(a0),d0
cmp.l d2,d0
bne.b L53
L52
move.l a2,a0
add.l #$27D98,a0
tst.b (a0)
bne.b L54
L53
; PB_SET_COLOR( ctx, PB,
move.l a4,-(a7)
jsr _gl_flush_pb
addq.w #4,a7
L54
; PB_SET_COLOR( ctx, PB,
move.l a2,a0
add.l #$27D80,a0
move.l d6,(a0)
; PB_SET_COLOR( ctx, PB,
move.l a2,a0
add.l #$27D80,a0
move.l d5,4(a0)
; PB_SET_COLOR( ctx, PB,
move.l a2,a0
add.l #$27D80,a0
move.l d3,$8(a0)
; PB_SET_COLOR( ctx, PB,
move.l a2,a0
add.l #$27D80,a0
move.l d2,$C(a0)
; PB_SET_COLOR( ctx, PB,
move.l a2,a0
add.l #$27D98,a0
move.b #1,(a0)
bra.b L59
L55
; PB_SET_INDEX(
move.l a2,a0
add.l #$27D90,a0
move.l (a0),d1
cmp.l $2272(a4),d1
bne.b L57
L56
move.l a2,a0
add.l #$27D98,a0
tst.b (a0)
bne.b L58
L57
; PB_SET_INDEX(
move.l a4,-(a7)
jsr _gl_flush_pb
addq.w #4,a7
L58
; PB_SET_INDEX(
move.l a2,a0
add.l #$27D90,a0
move.l $2272(a4),(a0)
; PB_SET_INDEX(
move.l a2,a0
add.l #$27D98,a0
move.b #1,(a0)
L59
; pz = (GLint) ( ctx->Current.RasterPos[2] * DEPTH_SCALE );
lea $224E(a4),a0
fmove.s $8(a0),fp0
fmul.s #$.477FFF00,fp0
fmove.l fp0,d5
; for (row=0;
moveq #0,d3
bra L85
L60
; GLubyte *src = (GLubyte *) gl_pixel_addr_in_image( unpac
clr.l -(a7)
move.l d3,-(a7)
clr.l -(a7)
pea $1A00.w
pea $1900.w
move.l $18(a5),-(a7)
move.l d4,-(a7)
move.l $20(a5),-(a7)
move.l $1C(a5),-(a7)
jsr _gl_pixel_addr_in_image
add.w #$24,a7
move.l d0,a0
; if (unpack->LsbFirst)
move.l $1C(a5),a1
tst.b $19(a1)
beq L73
L61
; GLubyte bitmask = 1;
moveq #1,d2
; for (col=0;
moveq #0,d0
bra L67
L62
; if (*src & bitmask)
moveq #0,d1
move.b (a0),d1
moveq #0,d6
move.b d2,d6
and.l d6,d1
beq.b L64
L63
; PB_WR
move.l $C(a5),d1
add.l d0,d1
move.l d1,d6
move.l a2,a1
add.l #$27D94,a1
move.l (a1),d1
move.l d6,0(a2,d1.l*4)
; PB_WR
move.l d7,d1
add.l d3,d1
move.l d1,d6
move.l a2,a3
add.l #$27D94,a3
lea $4B00(a2),a1
move.l (a3),d1
move.l d6,0(a1,d1.l*4)
; PB_WR
move.l a2,a1
add.l #$9600,a1
move.l a2,a3
add.l #$27D94,a3
move.l (a3),d1
move.w d5,0(a1,d1.l*2)
; PB_WR
move.l a2,a1
add.l #$27D94,a1
move.l (a1),d1
addq.l #1,d1
move.l a2,a1
add.l #$27D94,a1
move.l d1,(a1)
L64
; bitmask = bitmask << 1;
moveq #0,d1
move.b d2,d1
moveq #1,d2
asl.l d2,d1
move.b d1,d2
; if (bitmask==0)
bne.b L66
L65
; src++;
addq.w #1,a0
; bitmask = 1;
moveq #1,d2
L66
addq.l #1,d0
L67
cmp.l d4,d0
blt.b L62
L68
; PB_CHECK_FLUSH( ctx, PB )
move.l a2,a0
add.l #$27D94,a0
move.l (a0),d0
cmp.l #$C80,d0
blo L84
L69
; PB_CHECK_FLUSH( ctx, PB )
move.l a4,-(a7)
jsr _gl_flush_pb
addq.w #4,a7
L70
; if (bitmask!=1)
L71
; src++;
L72
bra L84
L73
; GLubyte bitmask = 128;
move.b #$80,d2
; for (col=0;
moveq #0,d0
bra L79
L74
; if (*src & bitmask)
moveq #0,d1
move.b (a0),d1
moveq #0,d6
move.b d2,d6
and.l d6,d1
beq.b L76
L75
; PB_WR
move.l $C(a5),d1
add.l d0,d1
move.l d1,d6
move.l a2,a1
add.l #$27D94,a1
move.l (a1),d1
move.l d6,0(a2,d1.l*4)
; PB_WR
move.l d7,d1
add.l d3,d1
move.l d1,d6
move.l a2,a3
add.l #$27D94,a3
lea $4B00(a2),a1
move.l (a3),d1
move.l d6,0(a1,d1.l*4)
; PB_WR
move.l a2,a1
add.l #$9600,a1
move.l a2,a3
add.l #$27D94,a3
move.l (a3),d1
move.w d5,0(a1,d1.l*2)
; PB_WR
move.l a2,a1
add.l #$27D94,a1
move.l (a1),d1
addq.l #1,d1
move.l a2,a1
add.l #$27D94,a1
move.l d1,(a1)
L76
; bitmask = bitmask >> 1;
moveq #0,d1
move.b d2,d1
moveq #1,d2
asr.l d2,d1
move.b d1,d2
; if (bitmask==0)
bne.b L78
L77
; src++;
addq.w #1,a0
; bitmask = 128;
move.b #$80,d2
L78
addq.l #1,d0
L79
cmp.l d4,d0
blt.b L74
L80
; PB_CHECK_FLUSH( ctx, PB )
move.l a2,a0
add.l #$27D94,a0
move.l (a0),d0
cmp.l #$C80,d0
blo.b L84
L81
; PB_CHECK_FLUSH( ctx, PB )
move.l a4,-(a7)
jsr _gl_flush_pb
addq.w #4,a7
L82
; if (bitmask!=128)
L83
; src++;
L84
addq.l #1,d3
L85
cmp.l $18(a5),d3
blt L60
L86
; gl_flush_pb(ctx);
move.l a4,-(a7)
jsr _gl_flush_pb
addq.w #4,a7
movem.l (a7)+,d2-d7/a2-a4
unlk a5
rts
SECTION "_gl_direct_bitmap:0",CODE
rts
;GLboolean gl_direct_bitmap( GLcontext *ctx,
XDEF _gl_direct_bitmap
_gl_direct_bitmap
movem.l d2-d5/a2/a3,-(a7)
fmovem.x fp2/fp3/fp4,-(a7)
movem.l $44(a7),d4/d5
move.l $40(a7),a2
move.l $5C(a7),a3
fmove.s $50(a7),fp1
fmove.s $58(a7),fp2
fmove.s $54(a7),fp3
fmove.s $4C(a7),fp4
L88
; GLint px = (GLint) ( (ctx->Current.RasterPos[0] - xorig) + 0.0
fmove.s $224E(a2),fp0
fsub.x fp4,fp0
fadd.s #$.00000000,fp0
fmove.l fp0,d3
; GLint py = (GLint) ( (ctx->Current.RasterPos[1] - yorig) + 0.0
lea $224E(a2),a0
fmove.s 4(a0),fp0
fsub.x fp1,fp0
fadd.s #$.00000000,fp0
fmove.l fp0,d2
; GLboolean completed = GL_FALSE;
moveq #0,d0
; if (ctx->Current.RasterPosValid==GL_FALSE)
tst.b $229A(a2)
bne.b L90
L89
moveq #1,d0
fmovem.x (a7)+,fp2/fp3/fp4
movem.l (a7)+,d2-d5/a2/a3
rts
L90
; color[1] = ctx->Current.RasterColor[1]
move.l a2,a0
add.l #$E964,a0
move.l (a0),d1
cmp.l #$1C00,d1
beq.b L92
L91
moveq #0,d0
fmovem.x (a7)+,fp2/fp3/fp4
movem.l (a7)+,d2-d5/a2/a3
rts
L92
; if (ctx->Driver.Bitmap)
tst.l $9B0(a2)
beq.b L94
L93
; completed = (*ctx->Driver.Bitmap)( ctx, px, py, width, h
move.l a3,-(a7)
move.l a2,a0
add.l #$E65E,a0
pea (a0)
move.l d5,-(a7)
move.l d4,-(a7)
move.l d2,-(a7)
move.l d3,-(a7)
move.l a2,-(a7)
move.l $9B0(a2),a0
jsr (a0)
add.w #$1C,a7
L94
; if (!completed)
tst.b d0
bne.b L96
L95
; render_bitmap( ctx, px, py, width, height, &ctx->Unpack,
move.l a3,-(a7)
move.l a2,a0
add.l #$E65E,a0
pea (a0)
move.l d5,-(a7)
move.l d4,-(a7)
move.l d2,-(a7)
move.l d3,-(a7)
move.l a2,-(a7)
jsr _render_bitmap
add.w #$1C,a7
L96
; ctx->Current.RasterPos[0] += xmove;
lea $224E(a2),a0
fmove.s (a0),fp0
fadd.x fp3,fp0
fmove.s fp0,(a0)
; ctx->Current.RasterPos[1] += ymove;
lea $224E(a2),a0
addq.w #4,a0
fmove.s (a0),fp0
fadd.x fp2,fp0
fmove.s fp0,(a0)
moveq #1,d0
fmovem.x (a7)+,fp2/fp3/fp4
movem.l (a7)+,d2-d5/a2/a3
rts
SECTION "_NoUnpack:1",DATA
_NoUnpack
dc.l 1,0,0,0,0,0
dc.b 0,0
SECTION "_gl_Bitmap:0",CODE
;void gl_Bitmap( GLcontext* ctx,
XDEF _gl_Bitmap
_gl_Bitmap
L121 EQU -$24
link a5,#L121
movem.l d2-d5/a2/a3,-(a7)
fmovem.x fp2/fp3/fp4,-(a7)
move.l $10(a5),d4
move.l $C(a5),d5
move.l $8(a5),a2
move.l $24(a5),a3
fmove.s $18(a5),fp1
fmove.s $20(a5),fp2
fmove.s $1C(a5),fp3
fmove.s $14(a5),fp4
L99
; if (width<0 || height<0)
tst.l d5
bmi.b L101
L100
tst.l d4
bpl.b L102
L101
; gl_error( ctx, GL_INVALID_VALUE, "glBitmap" );
move.l #L98,-(a7)
pea $501.w
move.l a2,-(a7)
jsr _gl_error
add.w #$C,a7
fmovem.x (a7)+,fp2/fp3/fp4
movem.l (a7)+,d2-d5/a2/a3
unlk a5
rts
L102
; if (INSIDE_BEGIN_END(ctx))
move.l a2,a0
add.l #$E968,a0
move.l (a0),d0
cmp.l #$1A00,d0
beq.b L104
L103
; gl_error( ctx, GL_INVALID_OPERATION, "glBitmap" );
move.l #L98,-(a7)
pea $502.w
move.l a2,-(a7)
jsr _gl_error
add.w #$C,a7
fmovem.x (a7)+,fp2/fp3/fp4
movem.l (a7)+,d2-d5/a2/a3
unlk a5
rts
L104
; if (ctx->Current.RasterPosValid==GL_FALSE)
tst.b $229A(a2)
bne.b L106
L105
fmovem.x (a7)+,fp2/fp3/fp4
movem.l (a7)+,d2-d5/a2/a3
unlk a5
rts
L106
; if (ctx->RenderMode==GL_RENDER)
move.l a2,a0
add.l #$E964,a0
move.l (a0),d0
cmp.l #$1C00,d0
bne L112
L107
; GLint px = (GLint) ( (ctx->Current.RasterPos[0] - xorig)
fmove.s $224E(a2),fp0
fsub.x fp4,fp0
fadd.s #$.00000000,fp0
fmove.l fp0,d3
; GLint py = (GLint) ( (ctx->Current.RasterPos[1] - yorig)
lea $224E(a2),a0
fmove.s 4(a0),fp0
fsub.x fp1,fp0
fadd.s #$.00000000,fp0
fmove.l fp0,d2
; GLboolean completed = GL_FALSE;
moveq #0,d0
; if (ctx->Driver.Bitmap)
tst.l $9B0(a2)
beq.b L109
L108
; completed = (*ctx->Driver.Bitmap)( ctx, px, py, wi
move.l a3,a1
move.l $18(a1),-(a7)
pea _NoUnpack(a6)
move.l d4,-(a7)
move.l d5,-(a7)
move.l d2,-(a7)
move.l d3,-(a7)
move.l a2,-(a7)
move.l $9B0(a2),a0
jsr (a0)
add.w #$1C,a7
L109
; if (!completed)
tst.b d0
bne.b L111
L110
; render_bitmap( ctx, px, py, width, height, &NoUnpa
move.l a3,a1
move.l $18(a1),-(a7)
pea _NoUnpack(a6)
move.l d4,-(a7)
move.l d5,-(a7)
move.l d2,-(a7)
move.l d3,-(a7)
move.l a2,-(a7)
jsr _render_bitmap
add.w #$1C,a7
L111
bra L120
L112
; else if (ctx->RenderMode==GL_FEEDBACK)
move.l a2,a0
add.l #$E964,a0
move.l (a0),d0
cmp.l #$1C01,d0
bne L119
L113
; color[0] = ctx->Current.RasterColor[0];
move.l $2262(a2),-$10(a5)
; color[1] = ctx->Current.RasterColor[1];
lea $2262(a2),a0
fmove.s 4(a0),fp0
lea -$10(a5),a0
fmove.s fp0,4(a0)
; color[2] = ctx->Current.RasterColor[2];
lea $2262(a2),a0
fmove.s $8(a0),fp0
lea -$10(a5),a0
fmove.s fp0,$8(a0)
; color[3] = ctx->Current.RasterColor[3];
lea $2262(a2),a0
fmove.s $C(a0),fp0
lea -$10(a5),a0
fmove.s fp0,$C(a0)
; if (ctx->Current.TexCoord[3] == 0.0)
move.l $222A(a2),a0
fmove.s $C(a0),fp0
ftst.d fp0
fbne.b L115
L114
; invq = 1.0F;
fmove.s #$.3F800000,fp0
bra.b L116
L115
; invq = 1.0F / ctx->Current.RasterTexCoord[3];
move.l $2276(a2),a0
fmove.s #$.3F800000,fp0
fdiv.s $C(a0),fp0
L116
; texcoord[0] = ctx->Current.RasterTexCoord[0] * invq;
move.l $2276(a2),a0
fmove.s (a0),fp1
fmul.x fp0,fp1
fmove.s fp1,-$20(a5)
; texcoord[1] = ctx->Current.RasterTexCoord[1] * invq;
move.l $2276(a2),a0
fmove.s 4(a0),fp1
fmul.x fp0,fp1
lea -$20(a5),a0
fmove.s fp1,4(a0)
; texcoord[2] = ctx->Current.RasterTexCoord[2] * invq;
move.l $2276(a2),a0
fmove.s $8(a0),fp1
fmul.x fp0,fp1
lea -$20(a5),a0
fmove.s fp1,$8(a0)
; texcoord[3] = ctx->Current.RasterTexCoord[3];
move.l $2276(a2),a0
fmove.s $C(a0),fp0
lea -$20(a5),a0
fmove.s fp0,$C(a0)
;BACK_TOKEN( ctx,
move.l a2,a0
add.l #$E828,a0
move.l $10(a0),d1
move.l a2,a0
add.l #$E828,a0
cmp.l $C(a0),d1
bhs.b L118
L117
;BACK_TOKEN( ctx,
move.l a2,a0
add.l #$E828,a0
move.l $8(a0),a1
move.l a2,a0
add.l #$E828,a0
move.l $10(a0),d0
move.l #$44E08000,0(a1,d0.l*4)
L118
;BACK_TOKEN( ctx,
move.l a2,a0
add.l #$E838,a0
move.l (a0),d0
addq.l #1,d0
move.l a2,a0
add.l #$E838,a0
move.l d0,(a0)
; gl_feedback_vertex( ctx,
pea -$20(a5)
fmove.l $2272(a2),fp0
fmove.s fp0,-(a7)
pea -$10(a5)
lea $224E(a2),a0
move.l $C(a0),-(a7)
lea $224E(a2),a0
move.l $8(a0),-(a7)
lea $224E(a2),a0
move.l 4(a0),-(a7)
move.l $224E(a2),-(a7)
move.l a2,-(a7)
jsr _gl_feedback_vertex
add.w #$20,a7
L119
; else if (ctx->RenderMode==GL_SELECT)
L120
; ctx->Current.RasterPos[0] += xmove;
lea $224E(a2),a0
fmove.s (a0),fp0
fadd.x fp3,fp0
fmove.s fp0,(a0)
; ctx->Current.RasterPos[1] += ymove;
lea $224E(a2),a0
addq.w #4,a0
fmove.s (a0),fp0
fadd.x fp2,fp0
fmove.s fp0,(a0)
fmovem.x (a7)+,fp2/fp3/fp4
movem.l (a7)+,d2-d5/a2/a3
unlk a5
rts
L98
dc.b 'glBitmap',0
END